iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0
自我挑戰組

學習JavaScript的基礎概念系列 第 2

Day2 JavaScript函式特性、同步&非同步

  • 分享至 

  • xImage
  •  

同步

表示JavaScript是一行一行執行下來,照出現的順序執行。
例:

function sayHello() { 
    console.log("Hello"); 
    console.log("How are you?"); 
} 
console.log("start"); 
sayHello(); 
console.log("end");

執行結果:
https://ithelp.ithome.com.tw/upload/images/20221009/20152070qX1th7uNKi.png

非同步

表示一個時間點不只一個執行,可能有一段程式執行時,會讓另一段程式碼開始執行,或變成它們同時執行。
JavaScript是同步執行,而瀏覽器是非同步可同時運行多個引擎。

因為事件發生的時間不可預期,其順序也無法事先得知,因此會說事件的處理、以及處理者(handler)函式的呼叫,都屬於「非同步」(asynhronous)型式。
大部分的Callback是非同步。

以下可能是非同步事件

  • 瀏覽器事件:頁面已完成載入動作、或當頁即將被卸載後觸發
  • 網路事件:回應AJAX請求
  • 使用者事件:滑鼠點擊、滑鼠游標移動、鍵盤按鍵觸發,addEventListener()
  • 計時器事件:逾期、或經過一段時間間隔後觸發

範例,使用計時器,2秒後顯示:

console.log("start");
setTimeout(()=>{
    console.log("Here is the code.");
},2000);
console.log("end");

執行結果:
https://ithelp.ithome.com.tw/upload/images/20221009/20152070ik2FCp13ab.png
解釋:
JavaScript是同步執行,但瀏覽器是非同步可同時運行多個引擎,JavaScript開始執行時會跳過setTimeout給瀏覽器處理,等JavaScript處理完全域執行環境的東西,才會處理事件,瀏覽器處理好setTimeout才會丟回給JavaScript。
https://ithelp.ithome.com.tw/upload/images/20221009/20152070RIsI02bk1p.png

範例:
直到瀏覽器完成載入並觸發事件

function starup(){
/*執行的動作*/
}
window.onload=startup;

簡化寫法:

window.onload=function(){/*執行的動作*/};

函式特性:

函式是模組化執行,所要執行的JavaScript語法都會被寫在函式裡面,大部分的程式碼需透過函式呼叫來執行。
用()來呼叫並執行函式裡的程式碼。

函式是JavaScript物件,是程式碼的容器,且有以下特性:

  • 可透過字面值(literal)來產生
  • 可指派給變數、陣列元素、以及其他物件的屬性(property)
  • 可當作參數傳入函式
  • 可作為函式的回傳値
  • 可擁有動態建立和指派的屬性

表示你可以對物件、字串、數值、布林……等,對任何型別做的事,你都可以對函式做,可以變成屬性和方法、指派一個變數的值為函數,可將函數當作參數傳給另一個函數。


延伸閱讀:

非同步的 JavaScript 介紹 - 學習該如何開發 Web | MDN
非同步(Asynchronous)與同步(Synchronous)的差異 | by Elsa Wang | Medium
[JavaScript] 一次搞懂同步與非同步的一切:一次做幾件事情 — 同步(Sync)與非同步(Async) - itsems_frontend - Medium


上一篇
Day1 前言與大綱
下一篇
Day 3 函式範圍鏈scope chain
系列文
學習JavaScript的基礎概念30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言